﻿using System;
using System.Drawing;
using System.Linq;
using System.Windows.Forms;
using CLM.Gestao.Rateios.BLL;
using CLM.Gestao.Administrador.BLL;
using CLM.Gestao.Interfaces;


namespace CLM.Gestao.Rateios.UI
{
    public partial class ImportarDriverGGF : Form
    {
        #region Construtor

        public ImportarDriverGGF(int pAno, int pMes)
        {
            try
            {
                InitializeComponent();
                var pos = this.PointToScreen(lblTitulo.Location);
                pos = picTitulo.PointToClient(pos);
                lblTitulo.Parent = picTitulo;
                lblTitulo.Location = pos;
                lblTitulo.BackColor = Color.Transparent;

                InicializaCombos(pAno, pMes);
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }

        public ImportarDriverGGF()
        {
            try
            {
                InitializeComponent();
                throw new Exception("O período deve ser informado!");
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }


        #endregion Construtor

        #region Eventos

        private void btnImportar_Click(object sender, EventArgs e)
        {
            Importar();
        }

        #endregion Eventos

        #region Métodos Privados

        private void Importar()
        {
            try
            {
                this.ofdImportar.Multiselect = false;
                this.ofdImportar.Title = "Selecionar Arquivo para Importação";
                this.ofdImportar.InitialDirectory = "C:\\";
                this.ofdImportar.FileName = "Selecione o arquivo...";
                this.ofdImportar.Filter = "Arquivos do Excel (*.xlsm;*.xlsx;*.xls)|*.xlsm;*.xlsx;*.xls";
                this.ofdImportar.CheckFileExists = true;
                this.ofdImportar.CheckPathExists = true;
                this.ofdImportar.FilterIndex = 2;
                this.ofdImportar.RestoreDirectory = true;
                this.ofdImportar.ReadOnlyChecked = true;
                this.ofdImportar.ShowReadOnly = true;

                DialogResult dr = this.ofdImportar.ShowDialog();
                if (dr == System.Windows.Forms.DialogResult.OK)
                {
                    ProdutoDriverRateioValor Driver = new ProdutoDriverRateioValor();
                    Driver.OnImportData += new Importacao.ImportDataEventHandler(ProdutoDriverRateioValor_OnImportData);

                    // Recupera o período selecionado no combo
                    Administrador.BLL.Periodo.Itens Periodo = new Administrador.BLL.Periodo.Itens();
                    Periodo = (Administrador.BLL.Periodo.Itens)cboPeriodo.SelectedItem;

                    Driver.ImportaDriverGGF(ofdImportar.FileNames.First(), Periodo.IdPeriodo);
                    Driver.OnImportData -= new Importacao.ImportDataEventHandler(ProdutoDriverRateioValor_OnImportData);
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }

        private void InicializaCombos(int pAno, int pMes)
        {
            // Carrega o combo de Período
            Administrador.BLL.Periodo Periodo = new Administrador.BLL.Periodo();
            cboPeriodo.DataSource = Periodo.GetItens(new Administrador.BLL.Periodo.Lista() { AnoPeriodo = pAno });
            cboPeriodo.DisplayMember = "DescricaoPeriodo";
            cboPeriodo.ValueMember = "MesPeriodo";

            cboPeriodo.SelectedValue = pMes;
        }

        void ProdutoDriverRateioValor_OnImportData(object sender, Importacao.ImportDataEventArgs e)
        {
            if (e.Tipo == Importacao.ImportDataEventArgs.type.Processo)
            {
                pgbProgresso.Maximum = e.Total;
                pgbProgresso.Value = e.Atual;

                lblMensagem.Text = String.Format("{0} - {1} de {2}", e.Mensagem, e.Atual, e.Total);
            }
            else
                lblMensagem.Text = String.Format("{0}", e.Mensagem);

            Application.DoEvents();
        }
        #endregion Métodos Privados

    }
}